package com.diy.sigmund.diycommon.entity.enumerate;

import com.diy.sigmund.diycommon.entity.base.BaseEnumInterface;
import java.util.Objects;

/**
 * 全局响应码定义枚举，全部定义在此枚举
 *
 * @author ylm-sigmund
 * @see org.springframework.http.HttpStatus
 * @since 2021/4/17 16:05
 */
public enum ResponseEnum implements BaseEnumInterface {
    //////////////////////公共响应码定义开始//////////////////////
    /** 响应成功 */
    SUCCESS("200", "success"),
    /** 请求的数据格式不符 */
    BODY_NOT_MATCH("400", "请求的数据格式不符"),
    /** 请求的数字签名不匹配 */
    SIGNATURE_NOT_MATCH("401", "请求的数字签名不匹配"),
    /** 未找到该资源 */
    NOT_FOUND("404", "未找到该资源"),
    /** 服务器内部错误 */
    INTERNAL_SERVER_ERROR("500", "服务器内部错误，请稍后再试"),
    /** 服务器正忙，请稍后再试 */
    SERVER_BUSY("502", "服务器正忙，请稍后再试"),
    /** 内部服务不可用，请稍后再试 */
    INTERNAL_SERVER_BUSY("503", "内部服务不可用，请稍后再试"),

    /** 访问请求处理失败 */
    REQUEST_FAIL("99", "访问请求处理失败"),
    /** 限流响应：请求过于频繁，请稍后尝试 */
    REQUEST_FREQUENT("98", "访问请求过于频繁，请稍后尝试"),
    /** 分布式锁响应：访问过于频繁，请稍后尝试 */
    REQUEST_CONCURRENT("97", "访问请求过于频繁，请稍后尝试"),
    /** "请求用户获取失败" */
    FAILED_TO_REQUEST_USER_ACQUISITION("96", "请求用户获取失败"),
    /** "非法feign内部调用" */
    ILLEGAL_FEIGN_INTERNAL_CALL("95", "非法feign内部调用"),
    /** "未能获取到token信息" */
    FAILED_TO_GET_TOKEN("94", "未能获取到token信息"),
    /** "会话失效，请重新登录" */
    SESSION_INVALIDATION("93", "会话失效，请重新登录"),
    /** "网关服务处理异常，请稍后再试" */
    GATEWAY_FAIL("92", "网关服务处理异常，请稍后尝试"),
    /** "非法请求" */
    ILLEGAL_REQUEST("91", "非法请求"),
    /** "当前负载太高，请稍后尝试" */
    THE_CURRENT_LOAD_IS_TOO_HIGN("90", "当前负载太高，请稍后尝试"),
    /** "缺失@RequestBody" */
    REQUEST_BODY_IS_MISSING("89", "缺失@RequestBody"),
    /** "Redisson配置缺失，请检查" */
    REDISSON_CONFIG_IS_MISSING("88", "Redisson配置缺失，请检查"),
    /** "88", "访问请求过于频繁，请稍后尝试" */
    REQUEST_FREQUENT_FOR_ASYNC("88", "访问请求过于频繁，请稍后尝试"),
    //////////////////////公共响应码定义结束//////////////////////

    //////////////////////业务响应码从600开始//////////////////////
    /** 用户姓名不能为空 */
    USER_NAME_ERROR("600", "用户姓名不能为空"),
    /** "非法商品id" */
    ILLEGAL_PRODUCT_ID("601", "非法商品id"),
    /** "已经卖完啦" */
    SOLD_OUT("602", "已经卖完啦"),
    /** "该商品已下架，请查看其它商品" */
    OFF_THE_SHELF("603", "该商品已下架，请查看其它商品"),
    /** "该商品已经卖完啦" */
    COMMODITY_SOLD_OUT("604", "该商品已经卖完啦"),
    /** "缓存中的库存更新失败" */
    CACHE_INVENTORY_UPDATE_FAIL("605", "缓存中的库存更新失败"),
    /** "数据库中的库存更新失败" */
    DB_INVENTORY_UPDATE_FAIL("606", "数据库中的库存更新失败"),
    /** "订单入库失败" */
    ORDER_ENDURANCE_FAIL("607", "订单入库失败"),
    /** "扣减积分失败" */
    DEDUCTING_THE_INTEGRAL_FAIL("608", "扣减积分失败"),
    /** "订单查询不存在" */
    ORDER_QUERY_DO_NOT_EXIST("609", "订单查询不存在"),
    ;

    private final String code;
    private final String msg;

    ResponseEnum(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public String getMsgByCode(String code) {
        for (ResponseEnum value : ResponseEnum.values()) {
            if (Objects.equals(value.getCode(), code)) {
                return value.getMsg();
            }
        }
        throw new IllegalArgumentException("code is not in this enum");
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getMsg() {
        return msg;
    }
}
